#include <stdio.h>
#include <stdbool.h> // 引入bool类型支持
#include <math.h>    // 引入sqrt函数
#include <string.h>

// double compare(double i, double j)
// {
//     if (i < j)
//     {
//         return i;
//     }
//     else
//     {
//         return j;
//     }
// }
// 求三个数的最小值
// void main()
// {
//     double a, b, c;
//     printf("请输入3个数，用逗号隔开,程序会输出最小值\n");
//     scanf("%lf%lf%lf", &a, &b, &c);
//     if (compare(a, b) < compare(a, c))
//     {
//         printf("最小值%lf", compare(a, b));
//     }
//     else
//     {
//         printf("最小值%lf", compare(a, c));
//     }
// }

// getchar和putchar
// void main(){
// printf("请输入一个char型变量");
// // char a = getchar();
// // printf("%c\n",a);
// putchar('i');
// }

// sizeof
// void main(){
//  printf("Size of int: %zu bytes\n", sizeof(int));
// printf("Size of float: %zu bytes\n", sizeof(float));
// printf("Size of double: %zu bytes\n", sizeof(double));
// printf("Size of char: %zu bytes\n", sizeof(char));
// }

// 用三目运算符判断abc的最大值
// void main(){
//     int a,b,c;
//     printf("请输入三个数字按空格隔开");
//     scanf("%d%d%d",&a,&b,&c);
//     int d = a>b
//     ?
//         a>c?a:c
//     :
//         b>c?b:c;
//     printf("%d",d);
// }

// 字母转换 输入一个字母，如果是大写就转换为小写，如果是小写就转换为大写
// void main(){
//     printf("请输入一个字母");
//     char x = getchar();
//     // if('A'<=x<='Z') c语言中不支持链式比较
//     if(x>='A'&&x<='Z'){
//         char newX = x + 32;
//         printf("您输入的大写字母%c,它的小写字母为%c",x,newX);
//     }else if(x>='a'&&x<='z'){
//         char newX = x - 32;
//         printf("您输入的小写字母%c,它的大写字母为%c",x,newX);
//     }
// }

// 输入月份，判断该月有多少天
// void main(){
//     printf("请输入月份");
//     int x;
//     scanf("%d",&x);
//     switch (x)
//     {
//     case  1:
//         printf("1月份31天");
//         break;
//     case  2:
//         printf("2月份28天");
//         break;
//     case  3:
//         printf("3月份31天");
//         break;
//     case  4:
//         printf("4月份30天");
//         break;
//     case  5:
//         printf("5月份31天");
//         break;
//     case  6:
//         printf("6月份30天");
//         break;
//     case  7:
//         printf("7月份31天");
//         break;
//     case  8:
//         printf("8月份31天");
//         break;
//     case  9:
//         printf("9月份30天");
//         break;
//     case  10:
//         printf("10月份31天");
//         break;
//     case  11:
//         printf("11月份30天");
//         break;
//     case  12:
//         printf("12月份31天");
//         break;
//     }
// }

// 输入一个x，要求输出y
// void main()
// {
//     printf("请输入一个值");
//     int x;
//     scanf("%d", &x);
//     int y = x == 0  ? x
//             : x > 0 ? 1
//                     : -1;
//     printf("y值为%d", y);
// }

// 输入华氏温度F，程序输出摄氏温度C，结果保留两位小数，转换公示：C=5*(F-32)/9
// void main(){
//     printf("请输入一个华氏温度F\n");
//     float F,C;
//     scanf("%f",&F);
//     C = 5*(F-32)/(float)(9);
//     printf("摄氏温度为%.2f",C);
// }

// switch月份天数
// void main()
// {
//     int month;
//     printf("请输入月份");
//     scanf("%d", &month);
//     switch (month)
//     {
//     case 1:
//     case 3:
//     case 5:
//     case 7:
//     case 8:
//     case 10:
//     case 12:
//         printf("%d月份31天", month);
//         break;
//     case 2:
//         printf("%d月份28天", month);
//         break;
//     case 4:
//     case 6:
//     case 9:
//     case 11:
//         printf("%d月份30天", month);
//         break;
//     default:
//         printf("输入有误");
//         break;
//     }
// }

// void main()
// {
//     float a, b, c;
//     char x;

//     printf("请输入数据");
//     scanf("%f", &a);
//     printf("请输入运算符");
//     scanf(" %c", &x);
//     printf("请输入数据");
//     scanf("%*f", &b);
//     switch (x)
//     {
//     case '+':
//         printf("%f", a + b);
//         break;
//     case '-':
//         printf("%f", a - b);
//         break;
//     case '*':
//         printf("%f", a * b);
//         break;
//     case '/':
//         printf("%f", a / b);
//         break;
//     default:
//         printf("运算符只支持加减乘除");
//         break;
//     }
// }

// void main(){
//     int i=0;
//     while (i<10)
//     {
//         printf("%d\n",i);
//         i++;
//     }

// }

// void main()
// {
//     int i = 0;
//     do
//     {
//         printf("%d\n",i);
//         i++;
//     } while (i < 10);
// }

// void main()
// {
//     int a[10] = {0};
//     for (int i = 0; i < sizeof(a) / sizeof(int); i++)
//     {
//         if (i = 3)
//         {
//             break;
//         }
//         printf("%d-----%d\n", i, a[i]);
//     }
// }

// void main() {
//     int rows;

//     printf("请输入行数: ");
//     scanf("%d", &rows);
//     for (int i = 1; i <= rows; i++) {
//         // 打印空格
//         for (int j = i; j < rows; j++) {
//             printf("_");
//         }
//         // 打印星号
//         for (int k = 1; k <= (2 * i - 1); k++) {
//             printf("*");
//         }
//         // 换行
//         printf("\n");
//     }

// }

// bool isPrime(int num) {
//     if (num <= 1) {
//         return false;
//     }
//     for (int i = 2; i * i <= num; i++) {
//         if (num % i == 0) {
//             return false;
//         }
//     }
//     return true;
// }

// int main() {
//     int num;

//     printf("请输入一个整数: ");
//     scanf("%d", &num);

//     if (isPrime(num)) {
//         printf("%d 是质数。\n", num);
//     } else {
//         printf("%d 不是质数。\n", num);
//     }

//     return 0;
// }

// bool isPrime(int num) {
//     if (num <= 1) {
//         return false;
//     }
//     for (int i = 2; i <= sqrt(num); i++) {
//         if (num % i == 0) {
//             return false;
//         }
//     }
//     return true;
// }

// int main() {
//     printf("1到50之间的质数有:\n");
//     for (int num = 1; num <= 50; num++) {
//         if (isPrime(num)) {
//             printf("%d ", num);
//         }
//     }
//     printf("\n");
//     return 0;
// }

// bool isPrime(int num) {
//     if (num <= 1) {
//         return false;
//     }
//     for (int i = 2; i <= sqrt(num); i++) {
//         if (num % i == 0) {
//             return false;
//         }
//     }
//     return true;
// }

// void printTrueFactors(int num) {
//     printf("%d的真因数有: ", num);
//     for (int i = 2; i <= sqrt(num); i++) {
//         if (num % i == 0) {
//             printf("%d ", i);
//             if (i != num / i) {
//                 printf("%d ", num / i);
//             }
//         }
//     }
//     printf("\n");
// }

// int main() {
//     printf("1到50之间合数的真因数有:\n");
//     for (int num = 1; num <= 50; num++) {
//         if (!isPrime(num) && num != 1) {
//             printTrueFactors(num);
//         }
//     }
//     return 0;
// }

// void zhishu(unsigned int num)
// {
//     int flag = 0;
//     // 质数必须满足两个条件：一是它必须是一个大于1的自然数；二是它只能被1和它本身整除，即它只有两个正因数：1和它自身。
//     if (num > 1)
//     {
//         for (int i = 2; i < num; i++)
//         {
//             if (num % i == 0)
//             {
//                     flag = 1;
//                     break;
//             }
//         }
//         if (flag == 1)
//         {
//             printf("\n%d是合数\n", num);
//             for (int j = 1; j < num; j++)
//             {
//                 if(num%j==0){
//                     printf("%d是%d的约数\t", j,num);
//                 }
//             }

//         }
//         else
//         {
//             printf("\n%d是质数\n", num);
//         }
//     }
//     else
//     {
//         printf("\n%d不是质数\n", num);
//     }
// }

// void main()
// {
//     for (int j = 0; j < 50; j++)
//     {
//         zhishu(j);
//     }
// }

// void main()
// {
//     int arr[6] = {1,2,3,4,5,6};
//     for (int i = 0; i < sizeof(arr)/sizeof(int); i++)
//     {
//         printf("%d---%p\t",arr[i],&arr[i]);
//     }
// }

// void main()
// {
//     int arr[] = {998, 658, 2222, 6398,777777};
//     int maxValue = arr[0];
//     for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
//     {
//         if (arr[i] > maxValue)
//         {
//             maxValue = arr[i];
//         }
//     }
//     printf("%d",maxValue);
// }

// 反序
// void main()
// {
//     int arr[] = {1, 2, 3, 4, 5};
//     int arrLength = sizeof(arr) / sizeof(int);
//     int arr2[arrLength];
//     int arr2Length = sizeof(arr2) / sizeof(int);
//     for (int i = arrLength-1,j=0; i >= 0; i--)
//     {
//         arr2[j] = arr[i];
//         j++;
//     };
//     for (int j = 0; j < arr2Length; j++)
//     {
//         arr[j] = arr2[j];
//     }
//     for (int k = 0; k < arrLength; k++)
//     {
//         printf("%d\t",arr[k]);
//     }
// }

// 冒泡
// void main()
// {
//     int arr[] = {12, 1,234, 456, 68, 990};
//     int arrLength = sizeof(arr) / sizeof(int);
//     int zhongjie = arr[0];
//     for (int i = 0; i < arrLength; i++)
//     {
//         for (int j = 0; j < arrLength - 1 - i; j++)
//         {
//             if (arr[j] < arr[j + 1])
//             {
//                 zhongjie = arr[j];
//                 arr[j] = arr[j + 1];
//                 arr[j + 1] = zhongjie;
//             }
//         }
//     }

//     for (int k = 0; k < arrLength; k++)
//     {
//         printf("%d\t", arr[k]);
//     }
//     printf("\n");
// }

// // 二维数组
// void main()
// {
//     int arr[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
//     printf("%lu\n", sizeof(arr)/sizeof(int)/3);
//     for (int i = 0; i < sizeof(arr)/sizeof(int)/3; i++)
//     {
//         for (int j = 0; j < 3; j++)
//         {
//             printf("%d\t", arr[i][j]);
//         }
//         printf("\n");
//     }
// }

// 三维数组

// 初始化三维数组
// void initializeArray(int arr[3][4][5]) {
//     for (int i = 0; i < 3; i++) {
//         for (int j = 0; j < 4; j++) {
//             for (int k = 0; k < 5; k++) {
//                 arr[i][j][k] = i * 20 + j * 5 + k;
//             }
//         }
//     }
// }

// // 打印三维数组
// void printArray(int arr[3][4][5]) {
//     for (int i = 0; i < 3; i++) {
//         for (int j = 0; j < 4; j++) {
//             printf("\n");
//             for (int k = 0; k < 5; k++) {
//                 printf("%4d\t", arr[i][j][k]);
//             }
//         }
//         printf("\n------");
//     }
//     printf("\n");
// }

// int main() {
//     int arr[3][4][5];

//     // 初始化数组
//     initializeArray(arr);

//     // 打印数组
//     printArray(arr);

//     return 0;
// }

// 带输入二维数组
// void main()
// {
//     int arr[3][3];
//     for (int i = 0; i < sizeof(arr)/sizeof(int)/3; i++)
//     {
//         for (int j = 0; j < 3; j++)
//         {
//             scanf("%d",&arr[i][j]);
//         }
//         printf("\n");
//     }
//     for (int i = 0; i < sizeof(arr)/sizeof(int)/3; i++)
//     {
//         for (int j = 0; j < 3; j++)
//         {
//             printf("%d\t", arr[i][j]);
//         }
//         printf("\n");
//     }
// }

// void main()
// {
//     printf("请输入十个数，用空格隔开：\n");
//     int arr[10] = {};
//     int arrLength = sizeof(arr) / sizeof(int);
//     for (int i = 0; i < arrLength; i++)
//     {
//         scanf("%d", &arr[i]);
//     }
//     int count;
//     printf("\n");
//     for (int j = 0; j < arrLength; j++)
//     {
//         for (int k = 0; k < arrLength - j; k++)
//         {
//             if (arr[k] < arr[k + 1])
//             {
//                 count = arr[k];
//                 arr[k] = arr[k + 1];
//                 arr[k + 1] = count;
//             }
//         }
//     }
//     printf("\n");
//     for (int l = 0; l < arrLength; l++)
//     {
//         printf("%d\t", arr[l]);
//     }
//     printf("\n");
// }

// void main()
// {
//     int row = 3;
//     int column = 5;
//     float arr[row][column];
//     printf("请输入15个数，用空格隔开：\n");
//     for (int i = 0; i < sizeof(arr) / sizeof(int) / column; i++)
//     {
//         for (int j = 0; j < column; j++)
//         {
//             scanf("%f", &arr[i][j]);
//         }
//         printf("\n");
//     }
//     for (int l = 0; l < row; l++)
//     {
//         float columnSum = 0;
//         for (int m = 0; m < column; m++)
//         {
//             printf("%.2f\t", arr[l][m]);
//             columnSum = columnSum + arr[l][m];
//         }
//         printf("行和为%.2f,行平均数为%.2f\t", columnSum, columnSum/column);
//         printf("\n");
//     }
//     for (int n = 0; n < column; n++)
//     {
//         float rowSum = 0;
//         for (int o = 0; o < row; o++)
//         {
//             rowSum = rowSum + arr[o][n];
//         }
//         printf("第%d列和为%.2f\t",n+1, rowSum);
//     }
//     printf("\n");
// }

// void main()
// {
//     char str[6] = {};
//     printf("请输入6个字符：\n");
//     gets(str);
//     puts(str);
//     char str2[6] = {};
//     printf("\n请输入6个字符：\n");
//     for (int i = 0; i < sizeof(str2) / sizeof(char); i++)
//     {
//         scanf("%c", &str2[i]);
//     }
//     for (int i = 0; i < sizeof(str2) / sizeof(char); i++)
//     {
//         printf("%c\t", str2[i]);
//     }
//     printf("\n");
// }

// 将字符串反转
// void main()
// {
//     char str[100] = {0};
//     int strLength = sizeof(str) / sizeof(char);
//     printf("请输入一个字符串：\n");
//     gets(str);
//     int flag = 0;
//     // size_t len = strlen(str);
//     printf("%d长度\n", strLength - 1);
//     // 剔除空
//     for (int k = 0; k < strLength - 1; k++)
//     {
//         if (str[k] != '\0')
//         {
//             printf("%d:%c\t", k, str[k]);
//             flag++;
//         }
//     }
//     printf("\nflag--%d\n", flag);
//     // 从两边开始循环，当循环到中间时，循环结束
//     for (int i = 0, j = flag - 1; i < j; i++, j--)
//     {
//         char temp = str[i];
//         str[i] = str[j];
//         str[j] = temp;
//     }
//     printf("输出结果\n");
//     puts(str);
// }

// 投票
// #define N 10
// void main()
// {
//     char student[N][50] = {}; // 存学生名字
//     int num[N] = {0};         // 存学生票数
//     char temp_name[50];       // 存输入的名字
//     int nums = 0;             // 存学生名字个数
//     // 遍历票数
//     for (int i = 0; i < N; i++)
//     {
//         printf("请投票\t");
//         gets(temp_name);
//         if (nums == 0)
//         {
//             printf("加第一条数据\n");
//             strcpy(student[0], temp_name);
//             nums++;
//             num[0]++;
//         }
//         else
//         {
//             int flag = 0;
//             // 判断名字是否重复
//             for (int j = 0; j < nums; j++)
//             {
//                 // 名字已经有了
//                 if (strcmp(temp_name, student[j]) == 0)
//                 {
//                     printf("%d名字重复，加数据\n", nums);
//                     flag = 1;
//                     num[j]++;
//                 }
//             }
//             if (flag == 0)
//             {
//                 printf("%d名字未重复，创建数据\n", nums);
//                 // 名字没有，加名字，存票数
//                 strcpy(student[nums], temp_name);
//                 num[nums] = 1;
//                 nums++;
//             }
//         }
//     }
//     printf("nums%d\n", nums);
//     printf("投票结果\n");
//     for (int k = 0; k < nums; k++)
//     {
//         printf("%s\t%d票\n", student[k], num[k]);
//     }
// }

// 字符串操作函数

// 1、查找字符串
// int main()
// {
//     char a[10] = {"1"};
//     char b[30] = {"hello2 998 alb"};
//     char *result = strstr(b, a);
//     printf("%s\n", result);
//     return 0;
// }

// 查找字符串长度
// int main()
// {
//     char b[30] = {"hello2 998 alb"};
//     int result = strlen(b);
//     printf("%u\n", result);
//     return 0;
// }

// // 用符号拆分字符串
// int main()
// {

//     char b[30] = {"hello2 998 alb"};
//     const char *reg = "e";
//     char *c = strtok(b, reg);
//     printf("%s\n", c);
//     return 0;
// }

// 连接字符串
//  int main()
//  {
//      char a[10] = {"1"};
//      char b[30] = {"hello2 998 alb"};
//      char *result = strcat(b, a);
//      printf("%s\n", result);
//      return 0;
//  }

// 格式化字符串并赋值
// void main(){
//     char a[20] = {};
//     sprintf(a,"%s-\t---%s","hello","world");
//     printf("%s\n",a);
// }

// 清零
// void main(){
//     char a[20] = {"hello world"};
//     // bzero(a,sizeof(a));
//     printf("%s\n",a);
// }

// memset
// void main()
// {
//     char a[20] = {"hello world"};
//     memset(a, '1', sizeof(a));
//     printf("%s\n", a);
// }

// 实现获取字符串实际长度
// int myStrlen(char *a)
// {
//     int length = 0;
//     while (a[length] != '\0')
//     {
//         length++;
//     }
//     printf(" %d\n", length);
//     return length;
// }

// 实现拷贝赋值
// char *myStrcpy(char *a, char *b)
// {
//     int i = 0;
//     while (a[i] != '\0')
//     {
//         b[i] = a[i];
//         i++;
//     }
//     b[i] = '\0';
//     return b;
// }

// 实现字符串连接
// char *myStrcat(char *a, char *b)
// {
//     int i = 0;
//     int j = 0;
//     while (a[i] != '\0')
//     {
//         i++;
//     }
//     while (b[j] != '\0')
//     {
//         a[i] = b[j];
//         i++;
//         j++;
//     }
//     a[i] = '\0';
//     return a;
// }

// 实现判断字符串比较函数
// int myStrcmp(char *a, char *b)
// {
//     size_t len_a = strlen(a);
//     size_t len_b = strlen(b);

//     if (len_a != len_b) {
//         return len_a < len_b ? -1 : 1;
//     }

//     for (size_t i = 0; i < len_a; i++) {
//         if (a[i] != b[i]) {
//             return a[i] < b[i] ? -1 : 1;
//         }
//     }
//     return 0;
// }

// int main()
// {
//     char a[20] = "H";
//     char b[20] = "H";
//     int c = myStrcmp(a, b);
//     printf("%d\n", c);
//     return 0;
// }

// // 求阶乘
// int fun1(int i)
// {
//     if (i == 1)
//     {
//         return 1;
//     }
//     else
//     {
//         return i * fun1(i -1);
//     }
// }

// void main()
// {
//     int x;
//     printf("请输入一个数：\n");
//     scanf("%d", &x);
//     int y = fun1(x);
//     printf("%d\n", y);
// }

// 指针
// void main()
// {
//     int a = 110;
//     // int *p;
//     // p = &a;
//     // int *p = NULL;
//     // int *p = (int *)(1000);
//     printf("%p\n", p);
//     printf("%d\n", *p);
// }

// 一维数组指针
void main()
{
    int num[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *p = NULL;
    p = num;
    // printf("%p\n", num);
    // printf("%p\n", &num);
    // printf("%p\n", &num[0]);
    // printf("%p\n", p);
    // printf("%p\n", &num[6]);
    // printf("%p\n", num+6);
    // printf("%d\n", *(num+6));
    // printf("%d\n", num[6]);
    // printf("%d\n", *p);

    printf("%d\n", *(p + 1));
    printf("%d\n", *p + 1);
}